package com.ppch.wuwamanus.config;

import com.ppch.wuwamanus.exception.BusinessException;
import com.ppch.wuwamanus.exception.ErrorCode;
import com.ppch.wuwamanus.tools.FilePath;
import com.qcloud.cos.model.PutObjectResult;
import jakarta.annotation.Resource;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.io.File;


/**
 * Package:WuWaManus
 * ClassName:FileUtils
 *
 * @Author 泡泡茶壶
 * @Create 2025/8/10 18:23
 * @Version 1.0
 * Description:
 */
@Component
@Data
@Slf4j
public class FileUtils {

    @Resource
    private CosManager cosManager;

    /**
     * 将本地文件上传到COS对象存储中
     *
     * @param localFileName 本地文件名
     * @return 文件访问地址（也是下载文件时的key）
     */
    public String uploadFileToCOS(String localFileName) {
        //本地文件基础路径（注意需要添加 /pdf）
        String baseURL = FilePath.FILE_SAVE_PATH + "/pdf";
        //创建File对象
        File pdfFile = new File(baseURL, localFileName);
        //定义要上传到COS存储桶中的文件路径及名称（例如将文件上传到COS存储桶中的file目录）
        String filePathAndName = String.format("/file/%s",localFileName);
        try {
            String requestId = null;
            // 文件存在才进行上传和删除操作
            if (pdfFile.exists()) {
                //传入文件路径参数及文件对象参数，实现上传文件到cos对象存储中
                PutObjectResult putObjectResult = cosManager.uploadObject(filePathAndName, pdfFile);
                requestId = putObjectResult.getRequestId();
                log.info("COS对象存储文件请求ID:"+requestId);
                boolean deleted = pdfFile.delete();
                if (deleted) {
                    log.info("本地文件已删除: {}", pdfFile.getAbsolutePath());
                } else {
                    log.warn("本地文件删除失败: {}", pdfFile.getAbsolutePath());
                }
            }
            //返回文件的请求ID
            return requestId;
        } catch (Exception e) {
            log.error("文件上传失败，原始文件名称：{}，错误信息：{}", localFileName, e.getMessage());
            throw new BusinessException(ErrorCode.SYSTEM_ERROR, "文件上传失败！");
        }
    }

    /**
     * 获取文件路径中的文件名
     *
     * @param filePath 文件路径
     * @return 文件名
     */
    public String getPdfFileName(String filePath) {
        // 1. 先去除字符串中的所有双引号
        String cleanedPath = filePath.replace("\"", "");
        // 2. 查找最后一个 '/' 的位置
        int lastSlashIndex = cleanedPath.lastIndexOf("/");
        // 3. 截取文件名（处理没有斜杠的特殊情况）
        String fileName;
        if (lastSlashIndex == -1) {
            // 如果没有找到斜杠，直接使用清理后的字符串
            fileName = cleanedPath;
        } else {
            // 从最后一个斜杠后一位开始截取
            fileName = cleanedPath.substring(lastSlashIndex + 1);
        }
        return fileName;
    }

}
